Estamos em período de decisões eleitorais importantes e com isso, é interessante observar alguns dados e atitudes de nossos representantes. Dessa maneira, nas análises a seguir iremos trabalhar em cima dos dados da CEAP com o objetivo de verificar um pouco sobre as características de gastos de alguns parlamentares, partidos e os estados os quais pertencem.

Obs.: os parlamentares que serão analisados são os deputados.

Para iniciarmos nossa análise, o primeiro passo é importar nossos dados.

Dados fornecidos:

  • nomeParlamentar: Nome adotado pelo Parlamentar ao tomar posse do seu mandato.
  • idCadastro: Número que identifica unicamente um deputado federal na CD.
  • sgUF: No contexto da cota CEAP, representa a unidade da federação pela qual o deputado foi eleito e é utilizada para definir o valor da cota a que o deputado tem.
  • sgPartido: Sigla do partido do parlamentar.
  • tipoDespesa: O seu conteúdo é a descrição do Tipo de Despesa relativo à despesa em questão.
  • especDespesa: Representa a descrição especificação mais detalhada de um referido Tipo de Despesa.
  • fornecedor: O conteúdo deste dado representa o nome do fornecedor do produto ou serviço presente no documento fiscal
  • CNPJCPF: O conteúdo deste dado representa o CNPJ ou o CPF do emitente do documento fiscal, quando se tratar do uso da cota em razão do reembolso despesas comprovadas pela emissão de documentos fiscais.
  • tipoDocumento: Este dado representa o tipo de documento do fiscal – 0 (Zero), para Nota Fiscal; 1 (um), para Recibo; e 2, para Despesa no Exterior.
  • dataEmissao: O conteúdo deste dado é a data de emissão do documento fiscal ou a data do documento que tenha dado causa à despesa.
  • valorDocumento: O seu conteúdo é o valor de face do documento fiscal ou o valor do documento que deu causa à despesa. Quando se tratar de bilhete aéreo, esse valor poderá ser negativo, significando que o referido bilhete é um bilhete de compensação, pois compensa um outro bilhete emitido e não utilizado pelo deputado (idem para o dado vlrLiquido abaixo).
  • valorGlosa: O seu conteúdo representa o valor da glosa do documento fiscal que incidirá sobre o Valor do Documento, ou o valor da glosa do documento que deu causa à despesa.
  • valorLiquido: O seu conteúdo representa o valor líquido do documento fiscal ou do documento que deu causa à despesa e será calculado pela diferença entre o Valor do Documento e o Valor da Glosa. É este valor que será debitado da cota do deputado. Caso o débito seja do Tipo Telefonia e o valor seja igual a zero, significa que a despesa foi franqueada.

Então iremos iniciar com os questionamentos:

Quais os deputados que mais gastaram dinheiro da CEAP?

dadosCEAP %>% 
  group_by(nomeParlamentar) %>% 
  summarise(valorTot = sum(valorLíquido)) %>%
  filter(valorTot >= 0) %>% 
  arrange(-valorTot) %>% 
  slice(1:10) %>% 
  na.omit(.) %>% 
  ggplot(aes(x = reorder(nomeParlamentar, valorTot),
             y = valorTot,
             fill = valorTot)) +
  geom_col(position = position_identity()) +
  labs(y = "Valor gasto total (R$)",
       x = "Nome do candidato",
       title = "Top 10 dos candidatos mais gastosos") +
  coord_flip()

dadosCEAP %>% 
  mutate(`Nome do parlamentar` = nomeParlamentar,
         `Sigla do estado` = sgUF,
         `Sigla do partido` = sgPartido) %>% 
  filter(`Nome do parlamentar` %in% c("EDIO LOPES",
                                "HIRAN GONÇALVES",
                                "JHONATAN DE JESUS")) %>% 
  group_by(`Nome do parlamentar`, 
           `Sigla do estado`, 
           `Sigla do partido`) %>% 
  summarise(`Valor total` = sum(valorLíquido))

Quais os mais ecoômicos?

dadosCEAP %>% 
  group_by(nomeParlamentar) %>% 
  summarise(valorTot = sum(valorLíquido)) %>%
  filter(valorTot >= 0) %>% 
  arrange(valorTot) %>% 
  slice(1:10) %>% 
  na.omit(.) %>% 
  ggplot(aes(x = reorder(nomeParlamentar, -valorTot),
             y = valorTot,
             fill = valorTot)) +
  geom_col(position = position_identity()) +
  labs(y = "Valor gasto total",
       x = "Nome do candidato",
       title = "Top 10 dos candidatos mais econômicos") +
  coord_flip()

dadosCEAP %>% 
  mutate(`Nome do parlamentar` = nomeParlamentar,
         `Sigla do estado` = sgUF,
         `Sigla do partido` = sgPartido) %>% 
  filter(`Nome do parlamentar` %in% c("CAMILO COLA",
                                "MARCIO MONTEIRO",
                                "MARCELO ALMEIDA")) %>% 
  group_by(`Nome do parlamentar`, 
           `Sigla do estado`, 
           `Sigla do partido`) %>% 
  summarise(`Valor total` = sum(valorLíquido))

Com os gráficos e tabelas acima, podemos observar que os candidatos que mais gastam dinheiro da CEAP foram Edio Lopes, Hiran Gonçalves e Jhonatan de Jesus. E um fato curioso, é que os 3 mais gastosos são do estado de Roraima, no entanto pertencem a partidos distintos. Já os candidatos que menos gastam são Camilo Cola, Marcelo Almeida e Marcio Monteiro, com gastos de R$0.62, R$26.16 e R$14.18, respectivamente. Ambos pertecentes a regiões brasileiras diferentes e aos partidos PMDB e PSDB, que por sinal são partidos de grande influência em nosso cenário político.

Quais os estados cujos deputados gastam mais e menos no exterior?

dadosCEAP %>% 
  filter(tipoDocumento == 2) %>% 
  group_by(sgUF) %>% 
  summarise(valorTot = sum(valorLíquido)) %>%
  arrange(-valorTot) %>% 
  na.omit(.) %>% 
  ggplot(aes(x = reorder(sgUF, -valorTot),
             y = valorTot,
             color = sgUF)) +
  geom_point() +
  geom_segment(aes(x = reorder(sgUF, -valorTot),
                   xend = reorder(sgUF, -valorTot),
                   y = 0,
                   yend = valorTot)) +
  labs(x = "UF",
       y = "Valor gasto (R$)",
       title = "Gastos de cada estado no exterior")

NA

Para esse questionamento, podemos ver que estados cujo deputados mais gastam verba no exterior são São Paulo, Minas Gerais e Pernambuco ultrapassando o valor de R$100.000. Acredito que um aspecto forte para esses estados se destacarem, seja pelo fato de terem muitos deputados, quem quiser olhar a quantidade de cada parlamentar em seu estado link: camara dos deputados. Por outro lado, Pará,Paraíba e Maranhão são os que mais poupam com despesas no exterior.

Quais os partidos cujos parlamentares mais usam CEAP no estado da Paraíba? E os que menos usam?

dadosCEAP %>% 
  filter(sgUF == "PB") %>% 
  group_by(sgPartido) %>% 
  summarise(valorCEAP = sum(valorLíquido),
            countGastos = n()) %>% 
  plot_ly(x = ~sgPartido,
          y = ~countGastos,
          color = ~valorCEAP,
          type = 'bar',
          text = ~paste('Sigla do partido: ', sgPartido,
                        '<br>Quantidade de gastos: ', countGastos,
                        '<br>Valor gasto CEAP: R$', valorCEAP)) %>% 
    layout(title = "Partidos que mais usam o CEAP na PB",
           xaxis = list(title = "Partido"),
           yaxis = list(title = "Quantidade de gastos"))
textfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arrays

NA

Como podemos observar, o partido que mais gasta dinheiro da CEAP é o PMDB, se destacando dos demais, com valor líquido de R$3936481,35. Logo em seguida vem o PP e SD com R$1256179,48 e R$1329195,94, respectivamente. Por outro lado, os partidos mais econômicos são o PROS e e PSC, com valor líquido gasto em R$4606,88 e R$118231,53

Quais os deputados que mais ultrapassam o limite de CEAP do seu estado?

limiteCEAP <- limiteCEAP %>% 
  select(sgUF = UF,
         limite_mensal = limite_mensal)
dados_limite = left_join(dadosCEAP, limiteCEAP)
dados_limite %>% 
  group_by(nomeParlamentar) %>% 
  filter(valorLíquido > limite_mensal) %>% 
  select(nomeParlamentar, 
         sgUF) %>%
  summarise(count = n()) %>% 
  unique() %>% 
  ungroup() %>% 
  arrange(-count) %>% 
  slice(1:10) %>% 
  plot_ly(y = ~nomeParlamentar,
          x = ~count,
          color = ~count,
          type = 'bar',
          text = ~paste('Nome do parlamentar: ', nomeParlamentar,
                        '<br>Qnt de vezes que ultrapassa: ', count)) %>% 
  layout(title = "Top 10 dos deputados que ultrapassaram o limite de CEAP",
         yaxis = list(title = "Nome do deputado"),
         xaxis = list(title = "Quantidade de vezes que ultrapassou"))
textfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arrays

Para esse questionamento, utilizei a quantidade de vezes que o parlamentar ultrapassou o limite mensal através do valor líquido e selecionei os dez deputados que mais ultrapassam o limite da CEAP, tendo como resultado Carlos Manato que ultrapassou 9 vezes esse limite, seguido de Lázaro Botelho com 8 e Pr. Marcio Feliciano com 7. Um fato interessante, é observar que o parlamentar Jhonatan de Jesus aparece novamente em uma estatística não muito agradável, pois logo acima é um dos mais gastosos e agora o que mais passa o limite mensal do CEAP.

Quais estados cujos parlamentares gastam mais com passagens aéreas?

dadosCEAP %>% 
  filter(tipoDespesa == "PASSAGENS AÉREAS") %>% 
  group_by(sgUF) %>% 
  summarise(valorTot = sum(valorLíquido)) %>% 
  na.omit(.) %>% 
  ggplot(aes(x = reorder(sgUF, -valorTot),
             y = valorTot,
             color = sgUF)) +
  geom_point() +
  geom_segment(aes(x = reorder(sgUF, -valorTot),
                   xend = reorder(sgUF, -valorTot),
                   y = 0,
                   yend = valorTot)) +
  coord_flip() +
  labs(x = "UF",
       y = "Valor gasto (R$)",
       title = "Gasto de passagens aéreas por estado com parlamentares")

Como podemos observar acima, os estados que mais gastam é São Paulo, Amazonas e Rio de Janeiro, inclusive SP novamente está no topo dos deputados que mais gastam como visto em uma visualização anterior. Mas o que realmente gera espanto é o estado do Amazonas, já que, segundo o site da câmara dos deputados possui um dos menores números de representantes do país gastar essa quantidade de dinheiro.

Para esponder a próxima pergunta, primiero escolhi três partidos, sendo eles: PMDB, PSDB e PT. Este critério de escolha foi pelo fato de serem partidos de grande influência no cenário da polítca brasileira. Após essa escolha, precisei filtrar os dados do dataframe e crei novos dataframe separados para facilitar o manuseio dos dados posteriormente.

# Extraindo dados dos partidos escolhidos: PMDB - PSDB - PT
dadosPMDB <- dadosCEAP %>% 
  filter(sgPartido == "PMDB")
dadosPSDB <- dadosCEAP %>% 
  filter(sgPartido == "PSDB")
dadosPT <- dadosCEAP %>% 
  filter(sgPartido == "PT")

Quais são os tipos de despesa mais utilizados no uso da CEAP pelos deputados desses partidos?

dadosPMDB %>% 
  group_by(tipoDespesa) %>% 
  summarise(valor_total = sum(valorLíquido)) %>% 
  na.omit(.) %>% 
  plot_ly(x = ~valor_total,
          y = ~tipoDespesa,
          type = 'bar',
          color = ~valor_total,
          text = ~paste('Valor total: R$', valor_total,
                        '<br>Tipo de despesa: ', tipoDespesa)) %>% 
  layout(title = "Tipos de despesas: PMDB",
           xaxis = list(title = "Valor total (R$)"),
           yaxis = list(title = "Tipo de despesa"))
textfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arrays

Como podemos observar, os maiores gastos estão em divulgação de atividade parlamentar, emissão de bilhete aéreo e locação/freteamento de veículos automotores, podendo chegar a R$17.410.145,86 de gasto em uma só categoria.

dadosPSDB %>% 
  group_by(tipoDespesa) %>% 
  summarise(valor_total = sum(valorLíquido)) %>% 
  na.omit(.) %>% 
  plot_ly(x = ~valor_total,
          y = ~tipoDespesa,
          type = 'bar',
          color = ~valor_total,
          text = ~paste('Valor total: R$', valor_total,
                        '<br>Tipo de despesa: ', tipoDespesa)) %>% 
  layout(title = "Tipos de despesas: PSDB",
           xaxis = list(title = "Valor total (R$)"),
           yaxis = list(title = "Tipo de despesa"))
textfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arraystextfont.color doesn't (yet) support data arrays
dadosPT %>% 
  group_by(tipoDespesa) %>% 
  summarise(valor_total = sum(valorLíquido)) %>% 
  na.omit(.) %>% 
  plot_ly(x = ~valor_total,
          y = ~tipoDespesa,
          type = 'bar',
          color = ~valor_total,
          text = ~paste('Valor total: R$', valor_total,
                        '<br>Tipo de despesa: ', tipoDespesa)) %>% 
  layout(title = "Tipos de despesas: PT",
           xaxis = list(title = "Valor total (R$)"),
           yaxis = list(title = "Tipo de despesa"))

Já o PSDB e o PT, tem como principal gasto a emissão de bilhetes aéreos, seguido por divulgação de atividade parlamentar e manutenção de escritório de apoio à atividade parlamentar, por outro lado gastam pouco em atividades como participação em cursos, palestras ou similares.

LS0tCnRpdGxlOiAiQW7DoWxpc2UgZGUgZ2FzdG9zIGRlIHBhcmxhbWVudGFyZXMiCmF1dGhvcjogIkl2eW5hIFNhbnRpbm8iCmRhdGU6ICIwMyBkZSBzZXRlbWJybyBkZSAyMDE4IgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwotLS0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkocGxvdGx5KQp0aGVtZV9zZXQodGhlbWVfbWluaW1hbCgpKQpgYGAKCkVzdGFtb3MgZW0gcGVyw61vZG8gZGUgZGVjaXPDtWVzIGVsZWl0b3JhaXMgaW1wb3J0YW50ZXMgZSBjb20gaXNzbywgw6kgaW50ZXJlc3NhbnRlIG9ic2VydmFyIGFsZ3VucyBkYWRvcyBlIGF0aXR1ZGVzIGRlIG5vc3NvcyByZXByZXNlbnRhbnRlcy4gRGVzc2EgbWFuZWlyYSwgbmFzIGFuw6FsaXNlcyBhIHNlZ3VpciBpcmVtb3MgdHJhYmFsaGFyIGVtIGNpbWEgZG9zIGRhZG9zIGRhIENFQVAgY29tIG8gb2JqZXRpdm8gZGUgdmVyaWZpY2FyIHVtIHBvdWNvIHNvYnJlIGFzIGNhcmFjdGVyw61zdGljYXMgZGUgZ2FzdG9zIGRlIGFsZ3VucyBwYXJsYW1lbnRhcmVzLCBwYXJ0aWRvcyBlIG9zIGVzdGFkb3Mgb3MgcXVhaXMgcGVydGVuY2VtLgoKT2JzLjogb3MgcGFybGFtZW50YXJlcyBxdWUgc2Vyw6NvIGFuYWxpc2Fkb3Mgc8OjbyBvcyBkZXB1dGFkb3MuCgpQYXJhIGluaWNpYXJtb3Mgbm9zc2EgYW7DoWxpc2UsIG8gcHJpbWVpcm8gcGFzc28gw6kgaW1wb3J0YXIgbm9zc29zIGRhZG9zLgoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CmRhZG9zQ0VBUCA9IHJlYWRfY3N2KGhlcmUoImRhdGEvZGFkb3NDRUFQLmNzdiIpKQpsaW1pdGVDRUFQID0gcmVhZF9jc3YoaGVyZSgiZGF0YS9saW1pdGVNZW5zYWxDRUFQLmNzdiIpKQpgYGAKCkRhZG9zIGZvcm5lY2lkb3M6CiAgCiAgLSBub21lUGFybGFtZW50YXI6IE5vbWUgYWRvdGFkbyBwZWxvIFBhcmxhbWVudGFyIGFvIHRvbWFyIHBvc3NlIGRvIHNldSBtYW5kYXRvLgogIC0gaWRDYWRhc3RybzogTsO6bWVybyBxdWUgaWRlbnRpZmljYSB1bmljYW1lbnRlIHVtIGRlcHV0YWRvIGZlZGVyYWwgbmEgQ0QuCiAgLSBzZ1VGOiBObyBjb250ZXh0byBkYSBjb3RhIENFQVAsIHJlcHJlc2VudGEgYSB1bmlkYWRlIGRhIGZlZGVyYcOnw6NvIHBlbGEgcXVhbCBvIGRlcHV0YWRvIGZvaSBlbGVpdG8gZSDDqSB1dGlsaXphZGEgcGFyYSBkZWZpbmlyIG8gdmFsb3IgZGEgY290YSBhIHF1ZSBvIGRlcHV0YWRvIHRlbS4KICAtIHNnUGFydGlkbzogU2lnbGEgZG8gcGFydGlkbyBkbyBwYXJsYW1lbnRhci4KICAtIHRpcG9EZXNwZXNhOiBPIHNldSBjb250ZcO6ZG8gw6kgYSBkZXNjcmnDp8OjbyBkbyBUaXBvIGRlIERlc3Blc2EgcmVsYXRpdm8gw6AgZGVzcGVzYSBlbSBxdWVzdMOjby4KICAtIGVzcGVjRGVzcGVzYTogUmVwcmVzZW50YSBhIGRlc2NyacOnw6NvICBlc3BlY2lmaWNhw6fDo28gbWFpcyBkZXRhbGhhZGEgZGUgdW0gcmVmZXJpZG8gVGlwbyBkZSBEZXNwZXNhLgogIC0gZm9ybmVjZWRvcjogTyBjb250ZcO6ZG8gZGVzdGUgZGFkbyByZXByZXNlbnRhIG8gbm9tZSBkbyBmb3JuZWNlZG9yIGRvIHByb2R1dG8gb3Ugc2VydmnDp28gcHJlc2VudGUgbm8gZG9jdW1lbnRvIGZpc2NhbAogIC0gQ05QSkNQRjogTyBjb250ZcO6ZG8gZGVzdGUgZGFkbyByZXByZXNlbnRhIG8gQ05QSiBvdSBvIENQRiBkbyBlbWl0ZW50ZSBkbyBkb2N1bWVudG8gZmlzY2FsLCBxdWFuZG8gc2UgdHJhdGFyIGRvIHVzbyBkYSBjb3RhIGVtIHJhesOjbyBkbyByZWVtYm9sc28gZGVzcGVzYXMgY29tcHJvdmFkYXMgcGVsYSBlbWlzc8OjbyBkZSBkb2N1bWVudG9zIGZpc2NhaXMuCiAgLSB0aXBvRG9jdW1lbnRvOiBFc3RlIGRhZG8gcmVwcmVzZW50YSBvIHRpcG8gZGUgZG9jdW1lbnRvIGRvIGZpc2NhbCDigJMgMCAoWmVybyksIHBhcmEgTm90YSBGaXNjYWw7IDEgKHVtKSwgcGFyYSBSZWNpYm87IGUgMiwgcGFyYSBEZXNwZXNhIG5vIEV4dGVyaW9yLgogIC0gZGF0YUVtaXNzYW86IE8gY29udGXDumRvIGRlc3RlIGRhZG8gw6kgYSBkYXRhIGRlIGVtaXNzw6NvIGRvIGRvY3VtZW50byBmaXNjYWwgb3UgYSBkYXRhIGRvIGRvY3VtZW50byBxdWUgdGVuaGEgZGFkbyBjYXVzYSDDoCBkZXNwZXNhLgogIC0gdmFsb3JEb2N1bWVudG86IE8gc2V1IGNvbnRlw7pkbyDDqSBvIHZhbG9yIGRlIGZhY2UgZG8gZG9jdW1lbnRvIGZpc2NhbCBvdSBvIHZhbG9yIGRvIGRvY3VtZW50byBxdWUgZGV1IGNhdXNhIMOgIGRlc3Blc2EuIFF1YW5kbyBzZSB0cmF0YXIgZGUgYmlsaGV0ZSBhw6lyZW8sIGVzc2UgdmFsb3IgcG9kZXLDoSBzZXIgbmVnYXRpdm8sIHNpZ25pZmljYW5kbyBxdWUgbyByZWZlcmlkbyBiaWxoZXRlIMOpIHVtIGJpbGhldGUgZGUgY29tcGVuc2HDp8OjbywgcG9pcyBjb21wZW5zYSB1bSBvdXRybyBiaWxoZXRlIGVtaXRpZG8gZSBuw6NvIHV0aWxpemFkbyBwZWxvIGRlcHV0YWRvIChpZGVtIHBhcmEgbyBkYWRvIHZsckxpcXVpZG8gYWJhaXhvKS4KICAtIHZhbG9yR2xvc2E6IE8gc2V1IGNvbnRlw7pkbyByZXByZXNlbnRhIG8gdmFsb3IgZGEgZ2xvc2EgZG8gZG9jdW1lbnRvIGZpc2NhbCBxdWUgaW5jaWRpcsOhIHNvYnJlIG8gVmFsb3IgZG8gRG9jdW1lbnRvLCBvdSBvIHZhbG9yIGRhIGdsb3NhIGRvIGRvY3VtZW50byBxdWUgZGV1IGNhdXNhIMOgIGRlc3Blc2EuCiAgLSB2YWxvckxpcXVpZG86IE8gc2V1IGNvbnRlw7pkbyByZXByZXNlbnRhIG8gdmFsb3IgbMOtcXVpZG8gZG8gZG9jdW1lbnRvIGZpc2NhbCBvdSBkbyBkb2N1bWVudG8gcXVlIGRldSBjYXVzYSDDoCBkZXNwZXNhIGUgc2Vyw6EgY2FsY3VsYWRvIHBlbGEgZGlmZXJlbsOnYSBlbnRyZSBvIFZhbG9yIGRvIERvY3VtZW50byBlIG8gVmFsb3IgZGEgR2xvc2EuIMOJIGVzdGUgdmFsb3IgcXVlIHNlcsOhIGRlYml0YWRvIGRhIGNvdGEgZG8gZGVwdXRhZG8uIENhc28gbyBkw6liaXRvIHNlamEgZG8gVGlwbyBUZWxlZm9uaWEgZSBvIHZhbG9yIHNlamEgaWd1YWwgYSB6ZXJvLCBzaWduaWZpY2EgcXVlIGEgZGVzcGVzYSBmb2kgZnJhbnF1ZWFkYS4KCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpkYWRvc0NFQVAkdmFsb3JHbG9zYSA8LSBhcy5udW1lcmljKHN1YigiLCIsICIuIiwgZGFkb3NDRUFQJHZhbG9yR2xvc2EsIGZpeGVkID0gVFJVRSkpIApgYGAKCiMjIyMgRW50w6NvIGlyZW1vcyBpbmljaWFyIGNvbSBvcyBxdWVzdGlvbmFtZW50b3M6CgojIyMgUXVhaXMgb3MgZGVwdXRhZG9zIHF1ZSBtYWlzIGdhc3RhcmFtIGRpbmhlaXJvIGRhIENFQVA/CgpgYGB7ciwgbWVzc2FnZT1GQUxTRX0KZGFkb3NDRUFQICU+JSAKICBncm91cF9ieShub21lUGFybGFtZW50YXIpICU+JSAKICBzdW1tYXJpc2UodmFsb3JUb3QgPSBzdW0odmFsb3JMw61xdWlkbykpICU+JQogIGZpbHRlcih2YWxvclRvdCA+PSAwKSAlPiUgCiAgYXJyYW5nZSgtdmFsb3JUb3QpICU+JSAKICBzbGljZSgxOjEwKSAlPiUgCiAgbmEub21pdCguKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihub21lUGFybGFtZW50YXIsIHZhbG9yVG90KSwKICAgICAgICAgICAgIHkgPSB2YWxvclRvdCwKICAgICAgICAgICAgIGZpbGwgPSB2YWxvclRvdCkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2lkZW50aXR5KCkpICsKICBsYWJzKHkgPSAiVmFsb3IgZ2FzdG8gdG90YWwgKFIkKSIsCiAgICAgICB4ID0gIk5vbWUgZG8gY2FuZGlkYXRvIiwKICAgICAgIHRpdGxlID0gIlRvcCAxMCBkb3MgY2FuZGlkYXRvcyBtYWlzIGdhc3Rvc29zIikgKwogIGNvb3JkX2ZsaXAoKQpgYGAKCmBgYHtyfQpkYWRvc0NFQVAgJT4lIAogIG11dGF0ZShgTm9tZSBkbyBwYXJsYW1lbnRhcmAgPSBub21lUGFybGFtZW50YXIsCiAgICAgICAgIGBTaWdsYSBkbyBlc3RhZG9gID0gc2dVRiwKICAgICAgICAgYFNpZ2xhIGRvIHBhcnRpZG9gID0gc2dQYXJ0aWRvKSAlPiUgCiAgZmlsdGVyKGBOb21lIGRvIHBhcmxhbWVudGFyYCAlaW4lIGMoIkVESU8gTE9QRVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJISVJBTiBHT07Dh0FMVkVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSkhPTkFUQU4gREUgSkVTVVMiKSkgJT4lIAogIGdyb3VwX2J5KGBOb21lIGRvIHBhcmxhbWVudGFyYCwgCiAgICAgICAgICAgYFNpZ2xhIGRvIGVzdGFkb2AsIAogICAgICAgICAgIGBTaWdsYSBkbyBwYXJ0aWRvYCkgJT4lIAogIHN1bW1hcmlzZShgVmFsb3IgdG90YWxgID0gc3VtKHZhbG9yTMOtcXVpZG8pKQpgYGAKCgojIyMgUXVhaXMgb3MgbWFpcyBlY2/DtG1pY29zPwpgYGB7ciwgbWVzc2FnZT1GQUxTRX0KZGFkb3NDRUFQICU+JSAKICBncm91cF9ieShub21lUGFybGFtZW50YXIpICU+JSAKICBzdW1tYXJpc2UodmFsb3JUb3QgPSBzdW0odmFsb3JMw61xdWlkbykpICU+JQogIGZpbHRlcih2YWxvclRvdCA+PSAwKSAlPiUgCiAgYXJyYW5nZSh2YWxvclRvdCkgJT4lIAogIHNsaWNlKDE6MTApICU+JSAKICBuYS5vbWl0KC4pICU+JSAKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKG5vbWVQYXJsYW1lbnRhciwgLXZhbG9yVG90KSwKICAgICAgICAgICAgIHkgPSB2YWxvclRvdCwKICAgICAgICAgICAgIGZpbGwgPSB2YWxvclRvdCkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2lkZW50aXR5KCkpICsKICBsYWJzKHkgPSAiVmFsb3IgZ2FzdG8gdG90YWwiLAogICAgICAgeCA9ICJOb21lIGRvIGNhbmRpZGF0byIsCiAgICAgICB0aXRsZSA9ICJUb3AgMTAgZG9zIGNhbmRpZGF0b3MgbWFpcyBlY29uw7RtaWNvcyIpICsKICBjb29yZF9mbGlwKCkKYGBgCgpgYGB7cn0KZGFkb3NDRUFQICU+JSAKICBtdXRhdGUoYE5vbWUgZG8gcGFybGFtZW50YXJgID0gbm9tZVBhcmxhbWVudGFyLAogICAgICAgICBgU2lnbGEgZG8gZXN0YWRvYCA9IHNnVUYsCiAgICAgICAgIGBTaWdsYSBkbyBwYXJ0aWRvYCA9IHNnUGFydGlkbykgJT4lIAogIGZpbHRlcihgTm9tZSBkbyBwYXJsYW1lbnRhcmAgJWluJSBjKCJDQU1JTE8gQ09MQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BUkNJTyBNT05URUlSTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BUkNFTE8gQUxNRUlEQSIpKSAlPiUgCiAgZ3JvdXBfYnkoYE5vbWUgZG8gcGFybGFtZW50YXJgLCAKICAgICAgICAgICBgU2lnbGEgZG8gZXN0YWRvYCwgCiAgICAgICAgICAgYFNpZ2xhIGRvIHBhcnRpZG9gKSAlPiUgCiAgc3VtbWFyaXNlKGBWYWxvciB0b3RhbGAgPSBzdW0odmFsb3JMw61xdWlkbykpCmBgYAoKQ29tIG9zIGdyw6FmaWNvcyBlIHRhYmVsYXMgYWNpbWEsIHBvZGVtb3Mgb2JzZXJ2YXIgcXVlIG9zIGNhbmRpZGF0b3MgcXVlIG1haXMgZ2FzdGFtIGRpbmhlaXJvIGRhIENFQVAgZm9yYW0gRWRpbyBMb3BlcywgSGlyYW4gR29uw6dhbHZlcyBlIEpob25hdGFuIGRlIEplc3VzLiBFIHVtIGZhdG8gY3VyaW9zbywgw6kgcXVlIG9zIDMgbWFpcyBnYXN0b3NvcyBzw6NvIGRvIGVzdGFkbyBkZSBSb3JhaW1hLCBubyBlbnRhbnRvIHBlcnRlbmNlbSBhIHBhcnRpZG9zIGRpc3RpbnRvcy4KSsOhIG9zIGNhbmRpZGF0b3MgcXVlIG1lbm9zIGdhc3RhbSBzw6NvIENhbWlsbyBDb2xhLCBNYXJjZWxvIEFsbWVpZGEgZSBNYXJjaW8gTW9udGVpcm8sIGNvbSBnYXN0b3MgZGUgUiQwLjYyLCBSJDI2LjE2IGUgUiQxNC4xOCwgcmVzcGVjdGl2YW1lbnRlLiBBbWJvcyBwZXJ0ZWNlbnRlcyBhIHJlZ2nDtWVzIGJyYXNpbGVpcmFzIGRpZmVyZW50ZXMgZSBhb3MgcGFydGlkb3MgUE1EQiBlIFBTREIsIHF1ZSBwb3Igc2luYWwgc8OjbyBwYXJ0aWRvcyBkZSBncmFuZGUgaW5mbHXDqm5jaWEgZW0gbm9zc28gY2Vuw6FyaW8gcG9sw610aWNvLgoKIyMjIFF1YWlzIG9zIGVzdGFkb3MgY3Vqb3MgZGVwdXRhZG9zIGdhc3RhbSBtYWlzIGUgbWVub3Mgbm8gZXh0ZXJpb3I/CgpgYGB7ciwgbWVzc2FnZT1GQUxTRX0KZGFkb3NDRUFQICU+JSAKICBmaWx0ZXIodGlwb0RvY3VtZW50byA9PSAyKSAlPiUgCiAgZ3JvdXBfYnkoc2dVRikgJT4lIAogIHN1bW1hcmlzZSh2YWxvclRvdCA9IHN1bSh2YWxvckzDrXF1aWRvKSkgJT4lCiAgYXJyYW5nZSgtdmFsb3JUb3QpICU+JSAKICBuYS5vbWl0KC4pICU+JSAKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHNnVUYsIC12YWxvclRvdCksCiAgICAgICAgICAgICB5ID0gdmFsb3JUb3QsCiAgICAgICAgICAgICBjb2xvciA9IHNnVUYpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX3NlZ21lbnQoYWVzKHggPSByZW9yZGVyKHNnVUYsIC12YWxvclRvdCksCiAgICAgICAgICAgICAgICAgICB4ZW5kID0gcmVvcmRlcihzZ1VGLCAtdmFsb3JUb3QpLAogICAgICAgICAgICAgICAgICAgeSA9IDAsCiAgICAgICAgICAgICAgICAgICB5ZW5kID0gdmFsb3JUb3QpKSArCiAgbGFicyh4ID0gIlVGIiwKICAgICAgIHkgPSAiVmFsb3IgZ2FzdG8gKFIkKSIsCiAgICAgICB0aXRsZSA9ICJHYXN0b3MgZGUgY2FkYSBlc3RhZG8gbm8gZXh0ZXJpb3IiKQogIApgYGAKClBhcmEgZXNzZSBxdWVzdGlvbmFtZW50bywgcG9kZW1vcyB2ZXIgcXVlIGVzdGFkb3MgY3VqbyBkZXB1dGFkb3MgbWFpcyBnYXN0YW0gdmVyYmEgbm8gZXh0ZXJpb3Igc8OjbyBTw6NvIFBhdWxvLCBNaW5hcyBHZXJhaXMgZSBQZXJuYW1idWNvIHVsdHJhcGFzc2FuZG8gbyB2YWxvciBkZSBSJDEwMC4wMDAuIEFjcmVkaXRvIHF1ZSB1bSBhc3BlY3RvIGZvcnRlIHBhcmEgZXNzZXMgZXN0YWRvcyBzZSBkZXN0YWNhcmVtLCBzZWphIHBlbG8gZmF0byBkZSB0ZXJlbSBtdWl0b3MgZGVwdXRhZG9zLCBxdWVtIHF1aXNlciBvbGhhciBhIHF1YW50aWRhZGUgZGUgY2FkYSBwYXJsYW1lbnRhciBlbSBzZXUgZXN0YWRvIFtsaW5rOiBjYW1hcmEgZG9zIGRlcHV0YWRvc10oaHR0cDovL3d3dzIuY2FtYXJhLmxlZy5ici9hLWNhbWFyYS9jb25oZWNhL3F1YW50b3Mtc2FvLWUtZGUtcXVlLWZvcm1hLWUtZGVmaW5pZG8tby1udW1lcm8tZGUtZGVwdXRhZG9zKS4gUG9yIG91dHJvIGxhZG8sIFBhcsOhLFBhcmHDrWJhIGUgTWFyYW5ow6NvIHPDo28gb3MgcXVlIG1haXMgcG91cGFtIGNvbSBkZXNwZXNhcyBubyBleHRlcmlvci4KCiMjIyBRdWFpcyBvcyBwYXJ0aWRvcyBjdWpvcyBwYXJsYW1lbnRhcmVzIG1haXMgdXNhbSBDRUFQIG5vIGVzdGFkbyBkYSBQYXJhw61iYT8gRSBvcyBxdWUgbWVub3MgdXNhbT8KCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpkYWRvc0NFQVAgJT4lIAogIGZpbHRlcihzZ1VGID09ICJQQiIpICU+JSAKICBncm91cF9ieShzZ1BhcnRpZG8pICU+JSAKICBzdW1tYXJpc2UodmFsb3JDRUFQID0gc3VtKHZhbG9yTMOtcXVpZG8pLAogICAgICAgICAgICBjb3VudEdhc3RvcyA9IG4oKSkgJT4lIAogIHBsb3RfbHkoeCA9IH5zZ1BhcnRpZG8sCiAgICAgICAgICB5ID0gfmNvdW50R2FzdG9zLAogICAgICAgICAgY29sb3IgPSB+dmFsb3JDRUFQLAogICAgICAgICAgdHlwZSA9ICdiYXInLAogICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnU2lnbGEgZG8gcGFydGlkbzogJywgc2dQYXJ0aWRvLAogICAgICAgICAgICAgICAgICAgICAgICAnPGJyPlF1YW50aWRhZGUgZGUgZ2FzdG9zOiAnLCBjb3VudEdhc3RvcywKICAgICAgICAgICAgICAgICAgICAgICAgJzxicj5WYWxvciBnYXN0byBDRUFQOiBSJCcsIHZhbG9yQ0VBUCkpICU+JSAKICAgIGxheW91dCh0aXRsZSA9ICJQYXJ0aWRvcyBxdWUgbWFpcyB1c2FtIG8gQ0VBUCBuYSBQQiIsCiAgICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlBhcnRpZG8iKSwKICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUXVhbnRpZGFkZSBkZSBnYXN0b3MiKSkKCiAgCmBgYAoKQ29tbyBwb2RlbW9zIG9ic2VydmFyLCBvIHBhcnRpZG8gcXVlIG1haXMgZ2FzdGEgZGluaGVpcm8gZGEgQ0VBUCDDqSBvIFBNREIsIHNlIGRlc3RhY2FuZG8gZG9zIGRlbWFpcywgY29tIHZhbG9yIGzDrXF1aWRvIGRlIFIkMzkzNjQ4MSwzNS4gTG9nbyBlbSBzZWd1aWRhIHZlbSBvIFBQIGUgU0QgY29tIFIkMTI1NjE3OSw0OCBlIFIkMTMyOTE5NSw5NCwgcmVzcGVjdGl2YW1lbnRlLiBQb3Igb3V0cm8gbGFkbywgb3MgcGFydGlkb3MgbWFpcyBlY29uw7RtaWNvcyBzw6NvIG8gUFJPUyBlIGUgUFNDLCBjb20gdmFsb3IgbMOtcXVpZG8gZ2FzdG8gZW0gUiQ0NjA2LDg4IGUgUiQxMTgyMzEsNTMKCiMjIyBRdWFpcyBvcyBkZXB1dGFkb3MgcXVlIG1haXMgdWx0cmFwYXNzYW0gbyBsaW1pdGUgZGUgQ0VBUCBkbyBzZXUgZXN0YWRvPyAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpsaW1pdGVDRUFQIDwtIGxpbWl0ZUNFQVAgJT4lIAogIHNlbGVjdChzZ1VGID0gVUYsCiAgICAgICAgIGxpbWl0ZV9tZW5zYWwgPSBsaW1pdGVfbWVuc2FsKQoKZGFkb3NfbGltaXRlID0gbGVmdF9qb2luKGRhZG9zQ0VBUCwgbGltaXRlQ0VBUCkKCmRhZG9zX2xpbWl0ZSAlPiUgCiAgZ3JvdXBfYnkobm9tZVBhcmxhbWVudGFyKSAlPiUgCiAgZmlsdGVyKHZhbG9yTMOtcXVpZG8gPiBsaW1pdGVfbWVuc2FsKSAlPiUgCiAgc2VsZWN0KG5vbWVQYXJsYW1lbnRhciwgCiAgICAgICAgIHNnVUYpICU+JQogIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lIAogIHVuaXF1ZSgpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIGFycmFuZ2UoLWNvdW50KSAlPiUgCiAgc2xpY2UoMToxMCkgJT4lIAogIHBsb3RfbHkoeSA9IH5ub21lUGFybGFtZW50YXIsCiAgICAgICAgICB4ID0gfmNvdW50LAogICAgICAgICAgY29sb3IgPSB+Y291bnQsCiAgICAgICAgICB0eXBlID0gJ2JhcicsCiAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCdOb21lIGRvIHBhcmxhbWVudGFyOiAnLCBub21lUGFybGFtZW50YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICc8YnI+UW50IGRlIHZlemVzIHF1ZSB1bHRyYXBhc3NhOiAnLCBjb3VudCkpICU+JSAKICBsYXlvdXQodGl0bGUgPSAiVG9wIDEwIGRvcyBkZXB1dGFkb3MgcXVlIHVsdHJhcGFzc2FyYW0gbyBsaW1pdGUgZGUgQ0VBUCIsCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOb21lIGRvIGRlcHV0YWRvIiksCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJRdWFudGlkYWRlIGRlIHZlemVzIHF1ZSB1bHRyYXBhc3NvdSIpKQoKYGBgCgpQYXJhIGVzc2UgcXVlc3Rpb25hbWVudG8sIHV0aWxpemVpIGEgcXVhbnRpZGFkZSBkZSB2ZXplcyBxdWUgbyBwYXJsYW1lbnRhciB1bHRyYXBhc3NvdSBvIGxpbWl0ZSBtZW5zYWwgYXRyYXbDqXMgZG8gdmFsb3IgbMOtcXVpZG8gZSBzZWxlY2lvbmVpIG9zIGRleiBkZXB1dGFkb3MgcXVlIG1haXMgdWx0cmFwYXNzYW0gbyBsaW1pdGUgZGEgQ0VBUCwgdGVuZG8gY29tbyByZXN1bHRhZG8gQ2FybG9zIE1hbmF0byBxdWUgdWx0cmFwYXNzb3UgOSB2ZXplcyBlc3NlIGxpbWl0ZSwgc2VndWlkbyBkZSBMw6F6YXJvIEJvdGVsaG8gY29tIDggZSBQci4gTWFyY2lvIEZlbGljaWFubyBjb20gNy4gVW0gZmF0byBpbnRlcmVzc2FudGUsIMOpIG9ic2VydmFyIHF1ZSBvIHBhcmxhbWVudGFyIEpob25hdGFuIGRlIEplc3VzIGFwYXJlY2Ugbm92YW1lbnRlIGVtIHVtYSBlc3RhdMOtc3RpY2EgbsOjbyBtdWl0byBhZ3JhZMOhdmVsLCBwb2lzIGxvZ28gYWNpbWEgw6kgdW0gZG9zIG1haXMgZ2FzdG9zb3MgZSBhZ29yYSBvIHF1ZSBtYWlzIHBhc3NhIG8gbGltaXRlIG1lbnNhbCBkbyBDRUFQLgoKIyMjIFF1YWlzIGVzdGFkb3MgY3Vqb3MgcGFybGFtZW50YXJlcyBnYXN0YW0gbWFpcyBjb20gcGFzc2FnZW5zIGHDqXJlYXM/CgpgYGB7ciwgbWVzc2FnZT1GQUxTRX0KZGFkb3NDRUFQICU+JSAKICBmaWx0ZXIodGlwb0Rlc3Blc2EgPT0gIlBBU1NBR0VOUyBBw4lSRUFTIikgJT4lIAogIGdyb3VwX2J5KHNnVUYpICU+JSAKICBzdW1tYXJpc2UodmFsb3JUb3QgPSBzdW0odmFsb3JMw61xdWlkbykpICU+JSAKICBuYS5vbWl0KC4pICU+JSAKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHNnVUYsIC12YWxvclRvdCksCiAgICAgICAgICAgICB5ID0gdmFsb3JUb3QsCiAgICAgICAgICAgICBjb2xvciA9IHNnVUYpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX3NlZ21lbnQoYWVzKHggPSByZW9yZGVyKHNnVUYsIC12YWxvclRvdCksCiAgICAgICAgICAgICAgICAgICB4ZW5kID0gcmVvcmRlcihzZ1VGLCAtdmFsb3JUb3QpLAogICAgICAgICAgICAgICAgICAgeSA9IDAsCiAgICAgICAgICAgICAgICAgICB5ZW5kID0gdmFsb3JUb3QpKSArCiAgY29vcmRfZmxpcCgpICsKICBsYWJzKHggPSAiVUYiLAogICAgICAgeSA9ICJWYWxvciBnYXN0byAoUiQpIiwKICAgICAgIHRpdGxlID0gIkdhc3RvIGRlIHBhc3NhZ2VucyBhw6lyZWFzIHBvciBlc3RhZG8gY29tIHBhcmxhbWVudGFyZXMiKQoKYGBgCgpDb21vIHBvZGVtb3Mgb2JzZXJ2YXIgYWNpbWEsIG9zIGVzdGFkb3MgcXVlIG1haXMgZ2FzdGFtIMOpIFPDo28gUGF1bG8sIEFtYXpvbmFzIGUgUmlvIGRlIEphbmVpcm8sIGluY2x1c2l2ZSBTUCBub3ZhbWVudGUgZXN0w6Egbm8gdG9wbyBkb3MgZGVwdXRhZG9zIHF1ZSBtYWlzIGdhc3RhbSBjb21vIHZpc3RvIGVtIHVtYSB2aXN1YWxpemHDp8OjbyBhbnRlcmlvci4gTWFzIG8gcXVlIHJlYWxtZW50ZSBnZXJhIGVzcGFudG8gw6kgbyBlc3RhZG8gZG8gQW1hem9uYXMsIGrDoSBxdWUsIHNlZ3VuZG8gbyBzaXRlIGRhIGPDom1hcmEgZG9zIGRlcHV0YWRvcyBwb3NzdWkgdW0gZG9zIG1lbm9yZXMgbsO6bWVyb3MgZGUgcmVwcmVzZW50YW50ZXMgZG8gcGHDrXMgZ2FzdGFyIGVzc2EgcXVhbnRpZGFkZSBkZSBkaW5oZWlyby4KClBhcmEgZXNwb25kZXIgYSBwcsOzeGltYSBwZXJndW50YSwgcHJpbWllcm8gZXNjb2xoaSB0csOqcyBwYXJ0aWRvcywgc2VuZG8gZWxlczogUE1EQiwgUFNEQiBlIFBULiBFc3RlIGNyaXTDqXJpbyBkZSBlc2NvbGhhIGZvaSBwZWxvIGZhdG8gZGUgc2VyZW0gcGFydGlkb3MgZGUgZ3JhbmRlIGluZmx1w6puY2lhIG5vIGNlbsOhcmlvIGRhIHBvbMOtdGNhIGJyYXNpbGVpcmEuIEFww7NzIGVzc2EgZXNjb2xoYSwgcHJlY2lzZWkgZmlsdHJhciBvcyBkYWRvcyBkbyBkYXRhZnJhbWUgZSBjcmVpIG5vdm9zIGRhdGFmcmFtZSBzZXBhcmFkb3MgcGFyYSBmYWNpbGl0YXIgbyBtYW51c2VpbyBkb3MgZGFkb3MgcG9zdGVyaW9ybWVudGUuCgpgYGB7ciwgbWVzc2FnZT1GQUxTRX0KIyBFeHRyYWluZG8gZGFkb3MgZG9zIHBhcnRpZG9zIGVzY29saGlkb3M6IFBNREIgLSBQU0RCIC0gUFQKZGFkb3NQTURCIDwtIGRhZG9zQ0VBUCAlPiUgCiAgZmlsdGVyKHNnUGFydGlkbyA9PSAiUE1EQiIpCgpkYWRvc1BTREIgPC0gZGFkb3NDRUFQICU+JSAKICBmaWx0ZXIoc2dQYXJ0aWRvID09ICJQU0RCIikKCmRhZG9zUFQgPC0gZGFkb3NDRUFQICU+JSAKICBmaWx0ZXIoc2dQYXJ0aWRvID09ICJQVCIpCmBgYAoKIyMjIFF1YWlzIHPDo28gb3MgdGlwb3MgZGUgZGVzcGVzYSBtYWlzIHV0aWxpemFkb3Mgbm8gdXNvIGRhIENFQVAgcGVsb3MgZGVwdXRhZG9zIGRlc3NlcyBwYXJ0aWRvcz8KCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQoKZGFkb3NQTURCICU+JSAKICBncm91cF9ieSh0aXBvRGVzcGVzYSkgJT4lIAogIHN1bW1hcmlzZSh2YWxvcl90b3RhbCA9IHN1bSh2YWxvckzDrXF1aWRvKSkgJT4lIAogIG5hLm9taXQoLikgJT4lIAogIHBsb3RfbHkoeCA9IH52YWxvcl90b3RhbCwKICAgICAgICAgIHkgPSB+dGlwb0Rlc3Blc2EsCiAgICAgICAgICB0eXBlID0gJ2JhcicsCiAgICAgICAgICBjb2xvciA9IH52YWxvcl90b3RhbCwKICAgICAgICAgIHRleHQgPSB+cGFzdGUoJ1ZhbG9yIHRvdGFsOiBSJCcsIHZhbG9yX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAnPGJyPlRpcG8gZGUgZGVzcGVzYTogJywgdGlwb0Rlc3Blc2EpKSAlPiUgCiAgbGF5b3V0KHRpdGxlID0gIlRpcG9zIGRlIGRlc3Blc2FzOiBQTURCIiwKICAgICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiVmFsb3IgdG90YWwgKFIkKSIpLAogICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJUaXBvIGRlIGRlc3Blc2EiKSkKCmBgYApDb21vIHBvZGVtb3Mgb2JzZXJ2YXIsIG9zIG1haW9yZXMgZ2FzdG9zIGVzdMOjbyBlbSBkaXZ1bGdhw6fDo28gZGUgYXRpdmlkYWRlIHBhcmxhbWVudGFyLCBlbWlzc8OjbyBkZSBiaWxoZXRlIGHDqXJlbyBlIGxvY2HDp8Ojby9mcmV0ZWFtZW50byBkZSB2ZcOtY3Vsb3MgYXV0b21vdG9yZXMsIHBvZGVuZG8gY2hlZ2FyIGEgUiQxNy40MTAuMTQ1LDg2IGRlIGdhc3RvIGVtIHVtYSBzw7MgY2F0ZWdvcmlhLgoKYGBge3IsIG1lc3NhZ2U9RkFMU0V9CgpkYWRvc1BTREIgJT4lIAogIGdyb3VwX2J5KHRpcG9EZXNwZXNhKSAlPiUgCiAgc3VtbWFyaXNlKHZhbG9yX3RvdGFsID0gc3VtKHZhbG9yTMOtcXVpZG8pKSAlPiUgCiAgbmEub21pdCguKSAlPiUgCiAgcGxvdF9seSh4ID0gfnZhbG9yX3RvdGFsLAogICAgICAgICAgeSA9IH50aXBvRGVzcGVzYSwKICAgICAgICAgIHR5cGUgPSAnYmFyJywKICAgICAgICAgIGNvbG9yID0gfnZhbG9yX3RvdGFsLAogICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnVmFsb3IgdG90YWw6IFIkJywgdmFsb3JfdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICc8YnI+VGlwbyBkZSBkZXNwZXNhOiAnLCB0aXBvRGVzcGVzYSkpICU+JSAKICBsYXlvdXQodGl0bGUgPSAiVGlwb3MgZGUgZGVzcGVzYXM6IFBTREIiLAogICAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJWYWxvciB0b3RhbCAoUiQpIiksCiAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlRpcG8gZGUgZGVzcGVzYSIpKQoKCmBgYAoKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpkYWRvc1BUICU+JSAKICBncm91cF9ieSh0aXBvRGVzcGVzYSkgJT4lIAogIHN1bW1hcmlzZSh2YWxvcl90b3RhbCA9IHN1bSh2YWxvckzDrXF1aWRvKSkgJT4lIAogIG5hLm9taXQoLikgJT4lIAogIHBsb3RfbHkoeCA9IH52YWxvcl90b3RhbCwKICAgICAgICAgIHkgPSB+dGlwb0Rlc3Blc2EsCiAgICAgICAgICB0eXBlID0gJ2JhcicsCiAgICAgICAgICBjb2xvciA9IH52YWxvcl90b3RhbCwKICAgICAgICAgIHRleHQgPSB+cGFzdGUoJ1ZhbG9yIHRvdGFsOiBSJCcsIHZhbG9yX3RvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAnPGJyPlRpcG8gZGUgZGVzcGVzYTogJywgdGlwb0Rlc3Blc2EpKSAlPiUgCiAgbGF5b3V0KHRpdGxlID0gIlRpcG9zIGRlIGRlc3Blc2FzOiBQVCIsCiAgICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlZhbG9yIHRvdGFsIChSJCkiKSwKICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiVGlwbyBkZSBkZXNwZXNhIikpCgpgYGAKCkrDoSBvIFBTREIgZSBvIFBULCB0ZW0gY29tbyBwcmluY2lwYWwgZ2FzdG8gYSBlbWlzc8OjbyBkZSBiaWxoZXRlcyBhw6lyZW9zLCBzZWd1aWRvIHBvciBkaXZ1bGdhw6fDo28gZGUgYXRpdmlkYWRlIHBhcmxhbWVudGFyIGUgbWFudXRlbsOnw6NvIGRlIGVzY3JpdMOzcmlvIGRlIGFwb2lvIMOgIGF0aXZpZGFkZSBwYXJsYW1lbnRhciwgcG9yIG91dHJvIGxhZG8gZ2FzdGFtIHBvdWNvIGVtIGF0aXZpZGFkZXMgY29tbyBwYXJ0aWNpcGHDp8OjbyBlbSBjdXJzb3MsIHBhbGVzdHJhcyBvdSBzaW1pbGFyZXMuCgo=